package 数组.easy;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

/**
 * @author Lw中
 * @date 2020/9/7 9:32
 */
public class WuLu {

    /**
     * 合并区间
     */

    public static int[][] merge(int[][] intervals) {
        int len = intervals.length;
        // 如果二维数组的长度小于2的话直接返回数组
        if (len < 2) {
            return intervals;
        }
        // 对二维数进行起点排序(当0[]中的参数变为1的时候就是根据数组中第二个参数进行排序)
        Arrays.sort(intervals, Comparator.comparing(o -> o[0]));

        List<int[]> res = new ArrayList<>();
        res.add(intervals[0]);

        for (int i = 1; i < len; i++) {
            // 遍历获取每个位置的数组
            int[] curr = intervals[i];
            // 获取res中最尾部的数组
            int[] peek = res.get(res.size() - 1);
            // 若无交集就将当前数组添加进list中
            if (curr[0] > peek[1]) {
                res.add(curr);
            } else {
                peek[1] = Math.max(peek[1], curr[1]);
            }
        }
        // 将list转化为二维数组返回
        return res.toArray(new int[res.size()][]);
    }

    public static void main(String[] args) {
        int[][] intervals = {{1, 3},{2, 6}, {8, 10}, {15, 18}};
        int[][] merge = merge(intervals);
        for (int i = 0; i < merge.length; i++) {
            System.out.println(Arrays.toString(merge[i]));
        }
    }

}
